<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 数组的其他循环方法 ；
        var arr = ["张三","李四","王五"];

        // 1.for
        // for(var i=0;i<arr.length;i++){
        //     console.log(arr[i]);
        // }
        // 2.for in  
        // for(var key in arr){
        //     console.log(arr[key]);
        // }

        // 一、forEach 循环方法 
        // arr.forEach(function(item,key,arr){
        //     console.log(item,key,arr);
        // })
        // forEach 注意 ： 1.不支持 break 和continue 
        
        // arr.forEach(function(item,key){
        //     if(key==1){
        //         break;
        //     }
        // })

        // 2.forEach里的this会改变
        // document.onclick = function(){
        //     console.log(this);
        //     var that = this; // 保存 外部的this 给变量that
        //     arr.forEach(function(item){
        //         console.log(item,that);
        //     })
        // }

        // 为什么会有forEach？
        // 编程思路： 命令式 ：注重过程 如何做？    和 声明式  注重结果 ，做什么？
        // 编程范式 
        // 过程
        // for(var i=0;i<5;i++){

        // }
        // 结果
        

        // arr.forEach(function(item){
        //     console.log(item);
        // })
        // 模拟一个forEach
        // function myForEach(arr,fn){
        //     // 循环过程抽象 ，封装起来
        //     for(var i=0;i<arr.length;i++){
        //         fn(arr[i],i,arr);
        //     }
        // }

        
        // var arr = ["张三","李四","王五"];

        // myForEach(arr,function(item,key,arr){
        //     console.log(item,key,arr);
        // })


        // 把forEach方法注入到 所有数组的原型里
        // function myForEach(fn){
        //     // 循环过程抽象 ，封装起来
        //     for(var i=0;i<this.length;i++){
        //         fn(this[i],i,this);
        //     }
        // }
        // Array.prototype.myForEach = myForEach;
        // var arr = ["张三","李四","王五"];

        // arr.myForEach(function(item,key,arr){
        //     console.log(item,key,arr);
        // })



        // function func(arr,fn){
        //     // console.log(arr,fn);
        //     // var b = 2;
        //     for(var i=0;i<arr.length;i++){
        //              fn(arr[i]);  //调用的时候传递 实参
        //     }
        // }
        // var arr = [1,2,3];
        // var arg = function(a){  // 定义的时候 接收形参
        //     console.log("arg",a)
        // }
        // func(arr,arg)

    </script>
</body>
</html>